home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xa / DeclTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  13.9 KB  |  427 lines

  1. package com.extensibility.xa;
  2.  
  3. import com.extensibility.app.BaseAction;
  4. import com.extensibility.app.DialogFactory;
  5. import com.extensibility.app.UI;
  6. import com.extensibility.rock.RBevelBorder;
  7. import com.extensibility.rock.RTable;
  8. import com.extensibility.rock.Screen;
  9. import com.extensibility.rock.ScrollPop;
  10. import com.extensibility.rock.table.QlickerCellEditor;
  11. import com.extensibility.util.Debug;
  12. import com.extensibility.xa.undo.DeclTableClrActionUndoable;
  13. import com.extensibility.xml.BaseDeclaration;
  14. import com.extensibility.xml.ParserException;
  15. import com.extensibility.xml.URI;
  16. import java.awt.AWTEvent;
  17. import java.awt.Component;
  18. import java.awt.Dialog;
  19. import java.awt.Font;
  20. import java.awt.Point;
  21. import java.awt.Rectangle;
  22. import java.awt.datatransfer.Clipboard;
  23. import java.awt.datatransfer.ClipboardOwner;
  24. import java.awt.datatransfer.DataFlavor;
  25. import java.awt.datatransfer.Transferable;
  26. import java.awt.event.InputEvent;
  27. import java.awt.event.MouseEvent;
  28. import java.util.EventObject;
  29. import java.util.Vector;
  30. import javax.swing.JComponent;
  31. import javax.swing.JFrame;
  32. import javax.swing.JPanel;
  33. import javax.swing.JPopupMenu;
  34. import javax.swing.JTable;
  35. import javax.swing.KeyStroke;
  36. import javax.swing.SwingUtilities;
  37. import javax.swing.event.ChangeEvent;
  38. import javax.swing.event.ListSelectionListener;
  39. import javax.swing.event.TableModelEvent;
  40. import javax.swing.event.TableModelListener;
  41. import javax.swing.table.TableCellEditor;
  42. import javax.swing.table.TableCellRenderer;
  43. import javax.swing.text.JTextComponent;
  44.  
  45. public abstract class DeclTable extends RTable implements ClipboardOwner, TableModelListener {
  46.    static final int COL_ERRORS = 0;
  47.    static final int COL_URI_ICON = 1;
  48.    static final int COL_NAME = 2;
  49.    static final DeclHeader defaultHeader = new DeclHeader();
  50.    static final KeyStroke BACK_KEY = KeyStroke.getKeyStroke(37, 8);
  51.    static final KeyStroke NEXT_KEY = KeyStroke.getKeyStroke(39, 8);
  52.    ListSelectionListener selectionListener = new 6((DeclTable)null);
  53.    ModeCorner corner;
  54.    BaseDeclaration editingDecl;
  55.    static DeclIconColumn rendIconCol = new DeclIconColumn();
  56.    static final int FLAG_WIDTH = 16;
  57.  
  58.    public DeclTable(DeclTableModel var1) {
  59.       super(var1);
  60.       Font var2 = UI.getDocFont();
  61.       if (var2 != null) {
  62.          ((RTable)this).setFont(var2);
  63.       }
  64.  
  65.       ((Component)this).addMouseListener(new URIPopper(this));
  66.    }
  67.  
  68.    protected BaseAction createCheckinAction(URI var1) {
  69.       return new 1(var1, this, "pop.uri.checkin", var1.getShortName());
  70.    }
  71.  
  72.    protected BaseAction createUncheckoutAction(URI var1) {
  73.       return new 2(var1, this, "pop.uri.uncheckout", var1.getShortName());
  74.    }
  75.  
  76.    protected BaseAction createCheckoutAction(URI var1) {
  77.       return new 3(var1, this, "pop.uri.checkout", var1.getShortName());
  78.    }
  79.  
  80.    protected BaseAction createUnlockURIAction(URI var1) {
  81.       return new 4(var1, this, "pop.uri.set.editable", var1.getShortName());
  82.    }
  83.  
  84.    protected BaseAction createLockURIAction(URI var1) {
  85.       return new 5(var1, this, "pop.uri.set.non.editable", var1.getShortName());
  86.    }
  87.  
  88.    public final SchemaDoc getSchemaDoc() {
  89.       return this.getDeclTableModel().getSchemaDoc();
  90.    }
  91.  
  92.    protected void processMouseEvent(MouseEvent var1) {
  93.       if (!var1.isPopupTrigger() && ((AWTEvent)var1).getID() != 505 && ((AWTEvent)var1).getID() != 504) {
  94.          int var2 = ((JTable)this).columnAtPoint(var1.getPoint());
  95.          ((JTable)this).rowAtPoint(var1.getPoint());
  96.          if (var2 >= 0) {
  97.             boolean var4 = var2 == 0 || var2 == 1;
  98.             if (var4) {
  99.                ((RTable)this).setEditMode(2);
  100.             } else {
  101.                ((RTable)this).setEditMode(1);
  102.             }
  103.          }
  104.       }
  105.  
  106.       super.processMouseEvent(var1);
  107.    }
  108.  
  109.    public DeclTableModel getDeclTableModel() {
  110.       return (DeclTableModel)((JTable)this).getModel();
  111.    }
  112.  
  113.    public void lostOwnership(Clipboard var1, Transferable var2) {
  114.    }
  115.  
  116.    public void headerClick(MouseEvent var1, int var2) {
  117.       BaseDeclaration var3 = this.getEditingDecl();
  118.       BaseDeclaration var4 = var3 == null ? this.getSelectedDecl() : null;
  119.       int var5 = ((JTable)this).getEditingColumn();
  120.       if (((RTable)this).stopEditing()) {
  121.          this.getDeclTableModel().sort(var2, !((InputEvent)var1).isShiftDown());
  122.          if (var3 != null) {
  123.             int var6 = this.getDeclTableModel().getRowForDecl(var3);
  124.             if (var6 == -1) {
  125.                return;
  126.             }
  127.  
  128.             this.editCellAt(var6, var5);
  129.             ((RTable)this).enforceEditorCellSelection();
  130.          } else if (var4 != null) {
  131.             this.select(var4);
  132.          }
  133.  
  134.       }
  135.    }
  136.  
  137.    public void addNotify() {
  138.       super.addNotify();
  139.       ((RTable)this).addListSelectionListener(this.selectionListener);
  140.       ((JTable)this).getTableHeader().setToolTipText(UI.getString("tip.table.sort"));
  141.    }
  142.  
  143.    public void removeNotify() {
  144.       super.removeNotify();
  145.       ((RTable)this).removeListSelectionListener(this.selectionListener);
  146.    }
  147.  
  148.    public JComponent createCorner() {
  149.       JPanel var1 = new JPanel();
  150.       ((JComponent)var1).setBorder(new RBevelBorder());
  151.       return var1;
  152.    }
  153.  
  154.    public void showCell(int var1, int var2) {
  155.       if (var2 < 5) {
  156.          var2 = 0;
  157.       }
  158.  
  159.       super.showCell(var1, var2);
  160.    }
  161.  
  162.    public boolean select(BaseDeclaration var1) {
  163.       if (!((RTable)this).stopEditing()) {
  164.          return false;
  165.       } else {
  166.          int var2 = this.getDeclTableModel().getRowForDecl(var1);
  167.          if (var2 == -1) {
  168.             return false;
  169.          } else {
  170.             ((RTable)this).select(var2, 2);
  171.             return true;
  172.          }
  173.       }
  174.    }
  175.  
  176.    public JPopupMenu createCellPopup(MouseEvent var1, int var2, int var3, TableCellEditor var4) {
  177.       BaseDeclaration var5 = null;
  178.       ScrollPop var6 = new ScrollPop();
  179.       if ((((JTable)this).getEditingRow() != var2 || ((JTable)this).getEditingColumn() != var3) && !((JTable)this).getSelectionModel().isSelectedIndex(var2) && var3 == 0) {
  180.          ((RTable)this).select(var2);
  181.       }
  182.  
  183.       if (var3 == 1) {
  184.          return null;
  185.       } else if (!((RTable)this).isUnlocked() && ((JTable)this).getSelectionModel().isSelectedIndex(var2)) {
  186.          ((JPopupMenu)var6).add(super.cutAction);
  187.          ((JPopupMenu)var6).add(super.copyAction);
  188.          ((JPopupMenu)var6).add(super.pasteAction);
  189.          ((JPopupMenu)var6).addSeparator();
  190.          ((JPopupMenu)var6).add(super.clearAction);
  191.          return var6;
  192.       } else {
  193.          if (((RTable)this).isUnlocked() && var4 instanceof QlickerCellEditor) {
  194.             QlickerCellEditor var7 = (QlickerCellEditor)var4;
  195.             Rectangle var8 = ((JTable)this).getCellRect(var2, var3, false);
  196.             Point var9;
  197.             if (((EventObject)var1).getSource() == var7) {
  198.                var9 = var1.getPoint();
  199.             } else {
  200.                var9 = new Point(var1.getPoint().x - var8.x, var1.getPoint().y - var8.y);
  201.             }
  202.  
  203.             String var10;
  204.             if (((JTable)this).getEditingColumn() == var3 && ((JTable)this).getEditingRow() == var2) {
  205.                var10 = var7.getText();
  206.             } else {
  207.                var10 = (String)((JTable)this).getModel().getValueAt(var2, var3);
  208.             }
  209.  
  210.             String var11 = var7.getNameAtPoint(var10, var9);
  211.             if (var11 != null && var11.length() > 0) {
  212.                var5 = this.getDeclTableModel().getDeclaration(var2, var3, var11);
  213.             }
  214.  
  215.             if (var5 != null) {
  216.                ((JPopupMenu)var6).add(this.getSchemaWin().createGotoAction(var5));
  217.                return var6;
  218.             }
  219.          }
  220.  
  221.          return null;
  222.       }
  223.    }
  224.  
  225.    public boolean pasteable() {
  226.       Transferable var1 = Screen.getClip().getContents(this);
  227.       DataFlavor var2 = this.getDeclTableModel().getRowFlavor();
  228.       return var1 != null && var1.isDataFlavorSupported(var2);
  229.    }
  230.  
  231.    public void cut() {
  232.       this.copy();
  233.       this.clear();
  234.    }
  235.  
  236.    public void copy() {
  237.       Clipboard var1 = Screen.getClip();
  238.       Transferable var2 = this.getDeclTableModel().getTransferableData(((JTable)this).getSelectionModel());
  239.       var1.setContents(var2, this);
  240.    }
  241.  
  242.    protected BaseDeclaration paste(BaseDeclaration var1, SchemaDoc var2, SchemaDoc var3) throws Exception {
  243.       return var3.insertDeclaration(var1, this.getSelectedDecl(), (Boolean)null, (Boolean)null, var2);
  244.    }
  245.  
  246.    public void paste() {
  247.       Clipboard var1 = Screen.getClip();
  248.       Transferable var2 = var1.getContents(this);
  249.       SchemaDoc var3 = this.getDeclTableModel().getSchemaDoc();
  250.       int var4 = ((JTable)this).getSelectedColumn();
  251.       int var5 = ((RTable)this).getSelectedRow();
  252.       if (var2 != null && var2 instanceof ClipData && var2.isDataFlavorSupported(this.getDeclTableModel().getRowFlavor()) && ((ClipData)var2).getSchemaDoc() != null && ((ClipData)var2).getSchemaDoc().getSchema() != null) {
  253.          try {
  254.             DataFlavor var6 = this.getDeclTableModel().getRowFlavor();
  255.             Vector var7 = (Vector)var2.getTransferData(var6);
  256.  
  257.             for(int var8 = 0; var8 < var7.size(); ++var8) {
  258.                if (!((ClipData)var2).getSchemaDoc().getSchema().getFlavor().getFlavorName().equals(var3.getSchema().getFlavor().getFlavorName())) {
  259.                   DialogFactory.stop((Component)null, UI.getString("stop.paste.only.same.flavor"));
  260.                   return;
  261.                }
  262.  
  263.                if (var6.getRepresentationClass().isInstance(var7.elementAt(var8))) {
  264.                   this.paste((BaseDeclaration)var7.elementAt(var8), ((ClipData)var2).getSchemaDoc(), var3);
  265.                }
  266.             }
  267.          } catch (Exception var9) {
  268.             DialogFactory.showException(this, 100, var9);
  269.          }
  270.  
  271.          ((RTable)this).select(var5, var4);
  272.       } else {
  273.          ((Component)this).getToolkit().beep();
  274.       }
  275.    }
  276.  
  277.    public void clear() {
  278.       DeclTableClrActionUndoable var1 = new DeclTableClrActionUndoable(this, this.getSchemaWin());
  279.       if (var1.doClear()) {
  280.          this.getSchemaWin().getSchemaDoc().getUndoManager().addEdit(var1);
  281.       }
  282.  
  283.    }
  284.  
  285.    public void tableChanged(TableModelEvent var1) {
  286.       switch (var1.getType()) {
  287.          case -1:
  288.          case 0:
  289.          case 1:
  290.             if (((RTable)this).getEditMode() != 2) {
  291.                BaseDeclaration var2 = this.getEditingDecl();
  292.                int var3 = this.getDeclTableModel().getRowForDecl(var2);
  293.                if (var3 == -1 && var2 != null && (!(var2 instanceof AggregateAttributeDecl) || ((AggregateAttributeDecl)var2).getAttributesSize() != 0)) {
  294.                   var3 = this.getDeclTableModel().getRowByDeclName(var2.getName());
  295.                }
  296.  
  297.                int var4 = ((JTable)this).getEditingRow();
  298.                if (var2 == null) {
  299.                   var3 = this.getDeclTableModel().getNewRow();
  300.                }
  301.  
  302.                if (!this.isCellEditable(var3, ((JTable)this).getEditingColumn())) {
  303.                   ((RTable)this).cancelEditing();
  304.                }
  305.  
  306.                if (var3 == var4) {
  307.                   if (((JTable)this).getEditingColumn() == ((RTable)this).getLastEditingColumn() && var1.getType() == 0) {
  308.                      ((RTable)this).updateEditor(false);
  309.                   }
  310.                } else if (var3 == -1) {
  311.                   ((RTable)this).cancelEditing();
  312.                   ((RTable)this).select(0);
  313.                } else {
  314.                   ((JTable)this).setEditingRow(var3);
  315.                }
  316.  
  317.                if (this.getSchemaWin() != null) {
  318.                   this.getSchemaWin().declarationFocused(this.getDeclTableModel().getDeclaration(var3));
  319.                }
  320.             }
  321.          default:
  322.             super.tableChanged(var1);
  323.       }
  324.    }
  325.  
  326.    private SchemaWin getSchemaWin() {
  327.       return (SchemaWin)SwingUtilities.windowForComponent(this);
  328.    }
  329.  
  330.    public void editingStopped(ChangeEvent var1) {
  331.       super.editingStopped(var1);
  332.       this.editingDecl = null;
  333.    }
  334.  
  335.    public void editingCanceled(ChangeEvent var1) {
  336.       super.editingCanceled(var1);
  337.       this.editingDecl = null;
  338.    }
  339.  
  340.    public boolean editCellAt(int var1, int var2) {
  341.       boolean var3 = super.editCellAt(var1, var2);
  342.       this.editingDecl = this.getDeclTableModel().getDeclaration(((JTable)this).getEditingRow());
  343.       return var3;
  344.    }
  345.  
  346.    public boolean editCellAt(int var1, int var2, EventObject var3) {
  347.       boolean var4 = super.editCellAt(var1, var2, var3);
  348.       this.editingDecl = this.getDeclTableModel().getDeclaration(((JTable)this).getEditingRow());
  349.       return var4;
  350.    }
  351.  
  352.    public BaseDeclaration getEditingDecl() {
  353.       return this.editingDecl;
  354.    }
  355.  
  356.    public BaseDeclaration getSelectedDecl() {
  357.       int var1 = ((RTable)this).getSelectedRow();
  358.       return var1 < 0 ? null : this.getDeclTableModel().getDeclaration(var1);
  359.    }
  360.  
  361.    public ParserException validateCell(String var1) {
  362.       return this.getDeclTableModel().validateCell(var1, ((JTable)this).getEditingRow(), ((JTable)this).getEditingColumn());
  363.    }
  364.  
  365.    public TableCellRenderer createHeaderRenderer(int var1) {
  366.       return defaultHeader;
  367.    }
  368.  
  369.    public TableCellRenderer createCellRenderer(int var1) {
  370.       switch (var1) {
  371.          case 0:
  372.          case 1:
  373.             return rendIconCol;
  374.          default:
  375.             return super.createCellRenderer(var1);
  376.       }
  377.    }
  378.  
  379.    public int getInitialColumnWidth(int var1) {
  380.       switch (var1) {
  381.          case 0:
  382.          case 1:
  383.             return 16;
  384.          default:
  385.             return 0;
  386.       }
  387.    }
  388.  
  389.    public String getToolTipText(MouseEvent var1) {
  390.       String var2 = null;
  391.       Point var3 = var1.getPoint();
  392.       int var4 = ((JTable)this).columnAtPoint(var3);
  393.       int var5 = ((JTable)this).rowAtPoint(var3);
  394.       if (var4 != -1 && var5 != -1) {
  395.          var2 = this.getDeclTableModel().getToolTipText(var5, var4);
  396.       }
  397.  
  398.       if (var2 == null) {
  399.          var2 = super.getToolTipText(var1);
  400.       }
  401.  
  402.       return var2 != null && var2.length() == 0 ? null : var2;
  403.    }
  404.  
  405.    public boolean showCellDialog(int var1, int var2, EventObject var3) {
  406.       JTextComponent var4 = ((RTable)this).getCellEditorAsJTextComponent();
  407.       Debug.assert(var4 != null, "editor is not a text component as expected.");
  408.       MiscCellDialog var5 = new MiscCellDialog(this, (JFrame)SwingUtilities.getRoot(this), this.getDeclTableModel().getSchemaDoc(), this.getDeclTableModel().getDeclaration(var1), var4.getText());
  409.       var5.setTableInfo(var1, var2);
  410.       ((Dialog)var5).show();
  411.       return true;
  412.    }
  413.  
  414.    public boolean isCellEditable(int var1, int var2) {
  415.       return this.getDeclTableModel().isCellEditable(var1, var2);
  416.    }
  417.  
  418.    public boolean searchable(int var1, int var2) {
  419.       return var2 >= 2;
  420.    }
  421.  
  422.    // $FF: synthetic method
  423.    static SchemaWin access$6000071(DeclTable var0) {
  424.       return var0.getSchemaWin();
  425.    }
  426. }
  427.